/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wasolicitudesfiec.logicacontrol.SolicitarConvalidacionMateria;

import entidad.convalidacionMateria.Solicitudconvalidacionmateria;
import hero.interfaces.BnNodeValue;
import java.sql.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import wasolicitudesfiec.ConvalidacionMateria.EmitirInforme;
import wasolicitudesfiec.general.MensajeException;
import wasolicitudesfiec.logicacontrol.CTRL_Base;
import web.util.Constantes;
import web.util.SendMailEspol;

/**
 *
 * @author kabad
 */
public class CTRL_EmitirInforme extends CTRL_Base {

    private EmitirInforme gui;
    private final String nombreProceso = Constantes.Modelo.modelo_SolicitarConvalidacionMateria;
    private final String nombreActividad = Constantes.SolicitarConvalidacion.emitirInforme;

    public CTRL_EmitirInforme(EmitirInforme gui, FacesContext facesContext) {
        super(facesContext);
        this.gui = gui;
        String instancia;
        instancia = (String) externalContext.getRequestParameterMap().get("instancia");
        if (instancia != null) {
            externalContext.getSessionMap().put("instancia", instancia);
       }
    }

    public String getNombreInstanciaProceso() {
        String instancia;
        instancia = (String) externalContext.getSessionMap().get("instancia");
        return instancia;
    }
    
     public void inicializar() throws MensajeException {
        String nombreInstancia;
        Solicitudconvalidacionmateria solicitudConvalidacion;
        try {
           nombreInstancia = getNombreInstanciaProceso();
           this.inicializarInstancia(nombreInstancia);
           int idSolicitud = Integer.parseInt((String) prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitudConvalidacion = logica.getLogConvalidacionMateria().leerSolicitudConvalidacionNivel2(idSolicitud);
            gui.getMenu().setTitulo(this.nombreProceso + "_" + idSolicitud + ": " + nombreActividad);
            gui.getDetalleSolicitarConvalidacion().getLblMateriaconvalidar().setText(solicitudConvalidacion.getAConvalidar());
            gui.getDetalleSolicitarConvalidacion().getLblMateriaFiec().setText(solicitudConvalidacion.getMateria().getNombre());
            gui.getDetalleSolicitarConvalidacion().getLblNombreEstudiante().setText(solicitudConvalidacion.getEstudiante().getPersona().toString());
            gui.getDetalleSolicitarConvalidacion().getLblNumMatricula().setText(solicitudConvalidacion.getEstudiante().getMatricula());
            if(solicitudConvalidacion.getObservacionEstudiante()!=null)
                gui.getDetalleSolicitarConvalidacion().getTxtaComentariosEstudiante().setValue(solicitudConvalidacion.getObservacionEstudiante());
            else
                gui.getDetalleSolicitarConvalidacion().getTxtaComentariosEstudiante().setValue(Constantes.Mensajes.noComentarios);
                        
            if(solicitudConvalidacion.getPathArchivoAdjunto()!=null ){
                   gui.getDetalleSolicitarConvalidacion().getLinkArchivo().setRendered(true);
                gui.getDetalleSolicitarConvalidacion().getStNoArchivo().setRendered(false);
                gui.getDetalleSolicitarConvalidacion().getLinkArchivo().setText(solicitudConvalidacion.getNombreArchivo());
             gui.getDetalleSolicitarConvalidacion().getLinkArchivo().setUrl(Constantes.Rutas.rutaArchivos+solicitudConvalidacion.getPathArchivoAdjunto().replaceAll(" ", "%20") );
            }else{
                gui.getDetalleSolicitarConvalidacion().getLinkArchivo().setRendered(false);
                gui.getDetalleSolicitarConvalidacion().getStNoArchivo().setRendered(true);
            }
        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception exception) {
             Logger.getLogger(CTRL_EmitirInforme.class.getName()).log(Level.SEVERE, null, exception);
            throw new MensajeException(Constantes.Mensajes.noInicia);
        }
    }
     
        public boolean emitirInforme() throws MensajeException {
         FacesMessage mensaje;
        boolean comen = gui.getTxtaComentarioProfesor().getText() == null;
        if (comen) {
            mensaje = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ingrese un comentario acerca de su informe", "");
            facesContext.addMessage(gui.getTxtaComentarioProfesor().getClientId(facesContext), mensaje); 
            return false;            
        }
        String nombreInstancia;
        BnNodeValue actividad;
        Solicitudconvalidacionmateria solicitud;
        try {
            nombreInstancia = getNombreInstanciaProceso();
            this.inicializarInstancia(nombreInstancia);
            actividad = usrSession.getNode(nombreInstancia, nombreActividad);
            if (!(actividad != null &&
                    (actividad.getState() == hero.interfaces.Constants.Nd.READY ||
                    actividad.getState() == hero.interfaces.Constants.Nd.ANTICIPABLE))) {
                throw new Exception();
            }
            int idSolicitud = Integer.parseInt((String) prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitud = logica.getLogConvalidacionMateria().leerSolicitudConvalidacion(idSolicitud);

            solicitud.setObservacionProfesor((String) gui.getTxtaComentarioProfesor().getText());
            solicitud.setInforme((String) gui.getDdlInforme().getValue());
            solicitud = logica.getLogConvalidacionMateria().guardarYClonarSolicitudConvalidacion(solicitud);
            prjSession.setNodeProperty(nombreActividad, Constantes.Atributo.idSolicitudActividad, solicitud.getIdSolicitudConvalidacion() + "");
            prjSession.setNodeProperty(nombreActividad, Constantes.Atributo.informe, (String) gui.getDdlInforme().getValue());
            usrSession.startActivity(nombreInstancia, nombreActividad);
            usrSession.terminateActivity(nombreInstancia, nombreActividad);

             //enviar mail de notificacion
            int idSubdecano = new Integer(logica.leerConfiguracionPorNombre(Constantes.Configuracion.Subdecano.getNombreEnBD()).getValor());
            String to = logica.leerPersona(idSubdecano).getCorreo();
            int idSolicitudCompleta = solicitud.getFkParent();
            solicitud = logica.getLogConvalidacionMateria().leerSolicitudConvalidacionNivel2(idSolicitudCompleta);
            String subject = Constantes.MensajesCorreo.tituloCorreo + "Revisión de Solicitud de Convalidación de Materia pendiente";
            String message = Constantes.TipoSolicitud.ConvalidacionMateria + "_" + solicitud.getIdSolicitudConvalidacion() + ": " +
                    Constantes.SolicitarConvalidacion.revisarSolicitud + "\n\n" + "Título: " + solicitud.toString() + "\n" +
                    "Solicitante: " + logica.leerPersona(solicitud.getFkIdEstudiante()).toString() + "\n\n" +
                    "El profesor evaluador " + solicitud.getProfesor().toString()+ "ha emitido su informe: "+ solicitud.getInforme() +"\n"+
                     "Ahora la solicitud está en espera de su evaluación." + "\n\n"+
                        "\n\n" + "Puede realizar la actividad dirigiéndose a la sección actividades pendientes del sistema."
                + Constantes.MensajesCorreo.referenciaSistema;
            SendMailEspol sendMail = new SendMailEspol(to, subject, message);
            sendMail.send();

        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception ex) {
            Logger.getLogger(CTRL_EmitirInforme.class.getName()).log(Level.SEVERE, null, ex);
            throw new MensajeException(Constantes.Mensajes.noGuarda);
        }
       return true;
    
    }
}
